//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// <random>

// class seed_seq;

// template<class RandomAccessIterator>
//     void generate(RandomAccessIterator begin, RandomAccessIterator end);

#include <random>
#include <cassert>

#include "test_macros.h"

int main(int, char**)
{
    {
        // These numbers generated from a slightly altered version of dSFMT
        //  http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
        unsigned a[] =
        {
            509928861u,
            482551238u,
            141770655u,
            3445468037u,
            1614807826u,
            3110698871u,
            809182926u,
            2644632325u,
            3885131857u,
            1278630374u,
            3648975313u,
            1217833759u,
            1509686260u,
            2817190507u,
            134525747u,
            250267852u,
            2559105345u,
            2416641579u,
            426100435u,
            486929906u,
            241178241u,
            3531539379u,
            704692991u,
            3001633456u,
            3990516671u,
            2619782509u,
            588842726u,
            2871949673u,
            621390331u,
            2304055997u,
            3809702625u,
            2471383485u,
            1630735687u,
            2167939898u,
            2070992669u,
            2826890739u,
            1714346061u,
            1912761420u,
            539780511u,
            716119356u,
            1342493369u,
            1216009367u,
            2864243850u,
            36288867u,
            2981095630u,
            2480586007u,
            1287539180u,
            1804977887u,
            2219960896u,
            297158412u,
            2839013626u,
            1971706101u,
            3588181149u,
            1387242816u,
            3713499635u,
            3408234160u,
            3179393218u,
            1359207226u,
            3119279997u,
            2777679329u,
            125221793u,
            902631799u,
            949389096u,
            3415339313u,
            4117407143u,
            3119227103u,
            1787026946u,
            3917387257u,
            3936044384u,
            2242085379u,
            1140709958u,
            2523265662u,
            3627073995u,
            3604398568u,
            1427913954u,
            2465898599u,
            3825653050u,
            2090876078u,
            232270946u,
            3116274782u,
            1252172657u,
            3197497894u,
            3983224490u,
            1939344836u,
            4158531887u,
            88050086u,
            2343094701u,
            1067025562u,
            3321491106u,
            3772162169u,
            909332669u,
            1671671873u,
            755193996u,
            978524521u,
            2164582730u,
            1757783103u,
            3411415001u,
            850017018u,
            3068762300u,
            555996984u,
            2404040146u,
            3397007611u,
            237680219u,
            245818821u,
            177824968u,
            3220945682u,
            304446762u,
            2267298065u,
            1878973555u,
            3050739800u,
            535731508u,
            1160102565u,
            4109066907u,
            984269821u,
            3681788896u,
            60254699u,
            3890962421u,
            2991673698u,
            3982271427u,
            3514243671u,
            1234870914u,
            2069958363u,
            3867828422u,
            1847469687u,
            503598128u,
            967934988u,
            289386211u,
            393279961u,
            835485527u,
            3708682854u,
            965218590u,
            4020339834u,
            2159101708u,
            2575134771u,
            376656690u,
            3499375240u,
            3105954900u,
            2786692328u,
            3458480699u,
            1207173847u,
            2051152535u,
            2738812911u,
            2954646330u,
            2774866710u,
            2162149150u,
            3993372257u,
            2868120585u,
            3086420190u,
            3791115537u,
            3226697711u,
            1818303409u,
            4206013897u,
            1245186807u,
            1680347447u,
            684800149u,
            2372078492u,
            2566952562u,
            3310947940u,
            3885964747u,
            3270357885u,
            2098965232u,
            609044652u,
            434910954u,
            93043847u,
            805217072u,
            883298424u,
            3850995479u,
            1840717689u,
            124278163u,
            4250050101u,
            2337070911u,
            2576763405u,
            2518189119u,
            3059082421u,
            1532107996u,
            2920167825u,
            2726963926u,
            3951524890u,
            1272835728u,
            1039392592u,
            1237920408u,
            1996153268u,
            647883626u,
            4064365193u,
            355588474u,
            3625797533u,
            1209959194u,
            503163662u,
            530295589u,
            1668578780u,
            969028048u,
            2489337768u,
            841218738u,
            14126306u,
            1854884627u,
            3617055808u,
            202224793u,
            1744552899u,
            1559016256u,
            3455976027u,
            1064269942u,
            2990703287u,
            1169718685u,
            1411804743u,
            290849805u,
            756035681u,
            1505272475u,
            1426658932u,
            16045749u,
            3900455443u,
            108521850u,
            1009491914u,
            3928801938u,
            1022079325u,
            3076867150u,
            4268343543u,
            2886814247u,
            2005055376u,
            1649037732u,
            1954533894u,
            3779223482u,
            1093746989u,
            2376482601u,
            3561720470u,
            1870836501u,
            651953759u,
            1504660027u,
            2097900540u,
            2252668945u,
            2469849023u,
            1986217648u,
            2026387757u,
            131611273u,
            1467981299u,
            3440588252u,
            1916199579u,
            959039804u,
            2895114746u,
            3292235117u,
            649379239u,
            28649189u,
            3121113086u,
            3829761771u,
            1675837301u,
            1636154723u,
            3737794169u,
            4082428060u,
            1904712095u,
            2483810990u,
            979972563u,
            1269082707u,
            370986843u,
            1233170438u,
            3008501783u,
            3905837878u,
            1566704758u,
            2380919351u,
            159980022u,
            1334100319u,
            2492554074u,
            137995234u,
            2318192908u,
            2608964837u,
            1061756617u,
            2760140790u,
            4069446576u,
            1995030350u,
            1037005594u,
            3489306635u,
            1588786838u,
            513304862u,
            3305490303u,
            2264317975u,
            3441620307u,
            4116970950u,
            3121104936u,
            1889858928u,
            2336693483u,
            3906421686u,
            2112501080u,
            2916376262u,
            2244436629u,
            663123276u,
            774309763u,
            258379821u,
            3845948150u,
            3747409682u,
            275936617u,
            563064995u,
            4049677403u,
            2099547498u,
            699768412u,
            1193153383u,
            4289059706u,
            3228950241u,
            1258043728u,
            1334659727u,
            3780523664u,
            1150773584u,
            2509712235u,
            2088544320u,
            1610096547u,
            3486280247u,
            1737969289u,
            1530372860u,
            2563496419u,
            2535243890u,
            998106254u,
            816066803u,
            1138534811u,
            1405672211u,
            2094652173u,
            1516292650u,
            2618233360u,
            3603340340u,
            247950637u,
            119238855u,
            1858201484u,
            3459729922u,
            157759693u,
            8278624u,
            3223944237u,
            3937209237u,
            3820737454u,
            839194830u,
            2385155004u,
            3872251779u,
            1375779033u,
            2333521764u,
            4025446588u,
            3839106064u,
            374878047u,
            1312756310u,
            1661068116u,
            1321601295u,
            4254646350u,
            3813168945u,
            134103711u,
            1535586498u,
            82369644u,
            411323516u,
            761969086u,
            819179215u,
            582595825u,
            3212591411u,
            665647256u,
            2372804634u,
            2378814089u,
            801724318u,
            658137482u,
            2084329677u,
            2512952888u,
            1573871611u,
            570440739u,
            3791634131u,
            1754412850u,
            406040873u,
            2576963615u,
            535767962u,
            1405150444u,
            3050488583u,
            3870648463u,
            2201665400u,
            178518008u,
            1050761986u,
            1635790851u,
            2757604743u,
            1194306620u,
            3895813535u,
            259506203u,
            1836108753u,
            555242075u,
            2574778399u,
            777988603u,
            2306149504u,
            2810362568u,
            402408487u,
            2163697780u,
            1982851065u,
            153191404u,
            1346605886u,
            197579289u,
            3847665347u,
            2437615293u,
            819252195u,
            3379927756u,
            1375088563u,
            2650550959u,
            2949512074u,
            3616578300u,
            1616680753u,
            1943918335u,
            2372676669u,
            599487215u,
            2422499758u,
            3164569986u,
            594265585u,
            667867933u,
            2382753501u,
            1213715652u,
            1470661916u,
            566771851u,
            463440918u,
            3056034602u,
            4101174909u,
            130576467u,
            2390765932u,
            1878895359u,
            2047260663u,
            3236801323u,
            1417182786u,
            2650291174u,
            541535507u,
            2050658788u,
            1497955566u,
            2322165653u,
            2177087336u,
            1286897331u,
            1168276780u,
            2296212785u,
            865258239u,
            1996766009u,
            2012854679u,
            1601388981u,
            2613134235u,
            1657591526u,
            2928355430u,
            3608354462u,
            744304148u,
            4205438799u,
            3436255438u,
            2852837451u,
            3546154475u,
            2198801660u,
            2941229067u,
            1725744406u,
            1576016233u,
            326273484u,
            3350602572u,
            2525026956u,
            529269391u,
            742537386u,
            966948684u,
            4207482684u,
            1647708147u,
            772473614u,
            4100132656u,
            2071821864u,
            1304991378u,
            2104686786u,
            494532571u,
            1596637043u,
            3530310572u,
            3844404338u,
            311529967u,
            2146085784u,
            1023590767u,
            3264294551u,
            1868912500u,
            1616049700u,
            4044971489u,
            226083499u,
            2644402452u,
            671262u,
            3856282165u,
            2788249556u,
            2975877350u,
            3022011519u,
            482463024u,
            3197313892u,
            2458947070u,
            213085732u,
            3423982376u,
            1127434251u,
            3003351323u,
            3859782824u,
            1452447943u,
            1377205388u,
            294467710u,
            4017757977u,
            4176004933u,
            1973840971u,
            1057204069u,
            2631053578u,
            1518315828u,
            1733084351u,
            2897935365u,
            371135589u,
            2166429075u,
            1316999184u,
            917942378u,
            4234919037u,
            3994887147u,
            202839671u,
            2611806597u,
            1763402132u,
            2528354843u,
            2928374144u,
            4287461088u,
            3374274817u,
            2515840515u,
            1174711579u,
            1526125414u,
            1328334421u,
            1467789564u,
            746112865u,
            2522923249u,
            2846786366u,
            785624778u,
            3640382502u,
            699425627u,
            2333340032u,
            879149811u,
            1012137370u,
            3671295088u,
            1115225691u,
            2008076767u,
            3224593008u,
            409074767u,
            3405081375u,
            1732184447u,
            4131742042u,
            2887579728u,
            411122719u,
            49575303u,
            2452487329u,
            132404436u,
            2634269867u,
            628865612u,
            2089064207u,
            3493619675u,
            573570698u,
            2803401952u,
            1846326706u,
            2776480783u,
            3202282367u,
            161406647u,
            555882857u,
            3002347158u,
            3646590134u,
            3970439001u,
            3593229755u,
            589030935u,
            1156189491u,
            4233262968u,
            1884160487u,
            1538393768u,
            2259575756u,
            1419917258u,
            658738179u,
            2762821193u,
            3753817926u,
            760570680u,
            900223123u,
            3199204483u,
            3152387802u,
            3518662321u,
            1138026800u,
            4166103824u,
            4256962887u,
            3860671603u,
            2476911454u,
            336216996u,
            708885235u,
            725397672u,
            1803116762u,
            2785555576u,
            101740015u,
            4078718445u,
            1955237214u,
            9650972u,
            449296169u,
            584729435u,
            3295180521u,
            589654348u,
            4256205129u,
            3872811168u,
            1159848257u,
            3914402308u,
            739056677u,
            2654817235u,
            2975781832u,
            2945335776u,
            2792662538u,
            4124362519u,
            1578034244u,
            347127450u,
            818851140u,
            2127100315u,
            2486499071u,
            4198130806u,
            1869105609u,
            1961961717u,
            1651285423u,
            376774848u,
            2681263019u,
            1185959234u,
            1674813864u,
            32812913u,
            3511671436u,
            3250344299u,
            2961919237u,
            722029715u,
            3677835234u,
            3534013806u,
            2896926420u,
            2405611392u,
            1523923100u,
            538451356u,
            2872548905u,
            3122230170u,
            337087364u,
            2659340735u,
            3849128055u,
            556114376u,
            1997152544u,
            3761450839u,
            3143779940u,
            3256759779u,
            2844565122u,
            228442897u,
            3589092287u,
            786119294u,
            4089515771u,
            3720982051u,
            1236422652u,
            2002271241u,
            98809947u,
            1925281885u,
            3856119646u,
            3522402037u,
            2119723860u,
            3500067577u,
            3688915105u,
            443441159u,
            1795715271u,
            2772968214u,
            921416086u,
            4274010930u,
            3123194886u,
            4156595625u,
            2153773382u,
            1880645824u,
            1783695477u,
            2639075904u,
            2369609874u,
            2020298024u,
            3035677150u,
            20152938u,
            3700162244u,
            2301383878u,
            704787941u,
            1912605772u,
            801557569u,
            3080244537u,
            2116665331u,
            2452111071u,
            3506260614u,
            862540580u,
            1275699972u,
            66210903u,
            106773917u,
            3693457478u,
            2402783622u,
            1239121180u,
            676003037u,
            2603048829u,
            1725001637u,
            1220274379u,
            24507488u,
            903764486u,
            4189545897u,
            1702746631u,
            3218068652u,
            3306659191u,
            790973134u,
            1265526960u,
            3431804268u,
            3325211765u,
            3605213000u,
            2877687268u,
            2252987926u,
            2380945092u,
            858624424u,
            1002964636u,
            1862801950u,
            1624111941u,
            2506763607u,
            760658520u,
            2734479345u,
            3411969548u,
            771362694u,
            3655222003u,
            2713412965u,
            2617767046u,
            1779451182u,
            3696950253u,
            1494085808u,
            1423735456u,
            800705781u,
            3797847307u,
            3518984231u,
            196474988u,
            1813335502u,
            2243046583u,
            2578707704u,
            2592488572u,
            4085007200u,
            3609770110u,
            2731535571u,
            3190540952u,
            1865257805u,
            1804143221u,
            3166875197u,
            1184225570u,
            2013135819u,
            3678444101u,
            2569887572u,
            3559018477u,
            3823772506u,
            1537738480u,
            713705243u,
            792081862u,
            1581340885u,
            3140030205u,
            3435723625u,
            3093218524u,
            3683643763u,
            753869336u,
            590258834u,
            608176704u,
            180732483u,
            31365344u,
            29753898u,
            2899243456u,
            1020423361u,
            152655309u,
            3809554076u,
            2069071231u,
            4000441303u,
            3046501174u,
            1897816893u,
            1610689080u,
            2580357110u,
            255270539u,
            3363490012u,
            3711397066u,
            3983751767u,
            1725231855u,
            172296475u,
            2179003295u,
            660196982u,
            526538193u,
            2137670317u,
            2219075701u,
            1987239722u,
            856404486u,
            2976933454u,
            3678014122u,
            2713682703u,
            3329090001u,
            2248358519u,
            3254616418u,
            1747030903u,
            1620566606u,
            880370315u,
            2337236788u,
            2883145755u
        };
        const int n = 768;
        unsigned b[n] = {0};
        unsigned v[] = {3, 5, 7};
        const int size = sizeof(v)/sizeof(v[0]);
        std::seed_seq s(v, v + size);
        s.generate(b, b + n);
        for (int i = 0; i < n; ++i)
            assert(a[i] == b[i]);
    }

  return 0;
}
